import {appInit, backendProcess, setMenu, startBackend, setResources} from './electron/init';
import {setIpc} from './electron/ipc';
import {setChildWindow} from "./electron/win";
import Store from 'electron-store'
import {setWs} from "./electron/ws";


import {app, BrowserWindow} from 'electron';
const path = require('node:path');
const fs = require('fs');

// app.commandLine.appendSwitch('proxy-server', 'http://10.22.0.29:8080')


// 初始化 store
global.appStore = new Store({
    // 配置项
    name: 'user-config', // 配置文件名称
    defaults: {
        user_id: "",
        server_url: "",
        proxy_url: "",
    }
});

// Handle creating/removing shortcuts on Windows when installing/uninstalling.
if (require('electron-squirrel-startup')) {
    app.quit();
}

const createWindow = () => {
    // Create the browser window.
    const W = 1300;
    const H = 900;
    global.mainWindow = new BrowserWindow({
        // titleBarStyle: 'hidden',
        // frame: false,
        // transparent: true,
        width: W,
        height: H,
        minWidth: W,
        minHeight: H,
        // frame: false, //无边框窗口
        icon: './public/icon.png',
        webPreferences: {
            nodeIntegration: true, //渲染进程允许使用node
            preload: path.join(__dirname, 'preload.js'),
            allowRunningInsecureContent: !import.meta.env.PROD, // 允许加载不安全的资源
            webSecurity: import.meta.env.PROD, // 禁用 Web 安全策略
        }
    });

    // and load the index.html of the app.
    if (MAIN_WINDOW_VITE_DEV_SERVER_URL) {
        global.mainWindow.loadURL(MAIN_WINDOW_VITE_DEV_SERVER_URL);
    } else {
        global.mainWindow.loadFile(path.join(__dirname, `../renderer/${MAIN_WINDOW_VITE_NAME}/index.html`));
    }

    console.log("envValues:", import.meta.env.PROD, import.meta.env.DEV, import.meta.env.MODE)
    if (import.meta.env.PROD) {
        startBackend(); // 启动后台脚本
    }

    // 监听窗口大小调整事件
    global.mainWindow.on('resize', () => {
        const [width, height] = global.mainWindow.getSize();
        global.mainWindow.webContents.send('window-resize', width, height);
    });

    if (!import.meta.env.PROD) {
        global.mainWindow.webContents.openDevTools();  // 开发者控制台
    }
};

// 当 Electron 完成初始化并准备创建浏览器窗口时，将调用此方法。某些 API 只能在此事件发生后使用。
app.whenReady().then(() => {
    createWindow();
    // On OS X it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0) {
            createWindow();
        }
    });


    /* 这里放 主进程 的功能绑定，用于和渲染进程通信，互相调用 */
    appInit();                  // 设置初始化
    setChildWindow(); // 打开子窗口
    setResources()              // 或群捕获屏幕视频源
    // setWs();       // 常驻websocket连接
    setMenu();        // 设置顶部原生菜单
    setIpc();                   // 设置常用系统调用：文件选择

});

// 当所有窗口关闭时退出，macOS 除外。在 macOS 上，应用程序及其菜单栏通常会保持活动状态，直到用户使用 Cmd + Q 明确退出。
app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') {
        // 关闭后端程序
        if (backendProcess) {
            backendProcess.kill();
        }
        app.quit();
    }
});

// 在此文件中，您可以包含应用程序其余部分的主进程代码。// 您也可以将它们放在单独的文件中，然后在这里导入。

// 捕获未处理的异常并记录日志
process.on('uncaughtException', (err) => {
    const logFilePath = path.join(path.dirname(app.getAppPath()), '/electron-log/error.log');
    fs.appendFileSync(logFilePath, `${new Date().toISOString()}: ${err.stack || err.message}\n`);
});
